
<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <title>NESASM</title>
    <style>
    html,body{font-size:14px; color:#444;} 
    a {text-decoration: none; color:blue;}
    a:hover{color:red;}
    .main{margin:0 auto; width:960px;}
    .box{border:1px solid #eee;}
    </style>
</head>

<body>

<div class="main">
<p>【简介】
</p><p>你应该知道什么是背景，它就是静态图片，主角在其间穿梭。背景不难做，但缺少用于NES的背景制作工具确实是个头疼的问题。
</p><p>【制作背景】
</p><p>在Tile Layer Pro中打开你的"our.bkg"，绘制一些瓷砖，然后在纸上绘制一个用瓷砖编号排列的地图。注意瓷砖编号从0开始。假设你的Tile Layer Pro每行有16个瓷砖，那么它们的编号排列如下：
</p><p>    $0  $1  $2  $3  $4  $5  $6  $7  $8  $9  $A  $B  $C  $D  $E  $F
</p><p>    $10 $11 $12 $13 $14...
</p><p>如果1号瓷砖是一个笑脸的左上四分之一，2号瓷砖是右上，$11=17是左下，$12=18是右下四分之一，你在纸上或文本文件中写出来应该就像这样：
</p><p>1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
</p><p>11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
</p><p>...
</p><p>注意：NES屏幕是32X32个瓷砖。
</p><p>下面就是把这个地图放到一个二进制文件中，以便载入PPU内存，就像你做调色板一样。
</p><p>我已经写好一个VB小程序用来将一个类似上面的地图文件（不包括‘...’）转换为二进制文件。你不必写全不32行，除非你确实有需要。
</p><p>从这里下载，运行它，在第一个框中输入地图文件（文本），第二个框输入你想创建的文件名。如果地图文件包括很多地图数据，程序会创建多于1个文件。
</p><p>【命名表】
</p><p>命名表这个东西让我实在是不理解，也是我不想写NES汇编的最大原因。技术手册中常常出现。
</p><p>简单说来，”名“就是我们上面的瓷砖编号，”表“就是地图。所以命名表就是我们在PPU中想放地图的位置。这个地址是$2000，但屏幕上第一行和最后一行常常是不显示的，所以实际开始地址是$2020。
</p><p>【构建代码】
</p><p>假设你已经有一个源文件，包含了以下基本内容：
</p><p>（1）段1 有$FFFA那些东西（复位向量， VBlank向量等）
</p><p>（2）段2 包含两个文件our.spr和our.bkg，顺序正确；
</p><p>（3）段0 开始于$8000，有代码设置PPU，并载入调色板；
</p><p>（3.5）二进制调色板文件包含语句在死循环后面；
</p><p>在调色板载入循环后面加入这些代码：
</p><p>    ;;--- 代码开始 ---;;
</p><p>    lda #$20
</p><p>    sta $2006 ; 写起始地址$2020
</p><p>    sta $2006 
</p><p>    ldx #$00
</p><p>loadNames:
</p><p>    lda ourMap, X ; 从地址(ourMap + X)处取一个字节，加载到A
</p><p>    inx
</p><p>    sta $2007
</p><p>    cpx #64 ; 我们上面一共写了64个字节；
</p><p>    bne loadNames ; 循环
</p><p>在.incbin 调色板文件语句后面加入这些代码：
</p><p>ourMap: .incbin "our.map" ; 假设our.map是生成的二进制map文件
</p><p>好了，汇编，运行，让背景显示吧！
</p><p>【一些其他事情】
</p><p>如果map2bin.exe产生了多个文件，你需要为每个文件准备一个循环和一个.incbin语句，同时循环次数变为$FF次。
</p><p>map2bin，由于用VB写的，使得每个文件大了2字节，因为VB每次写完文件都加一个新行。
</p><p>还有一种表叫做属性表，我们后面讲它。
</p></div>
</body>
</html>
